home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / basic_io.c < prev    next >
C/C++ Source or Header  |  2001-04-11  |  3KB  |  139 lines

  1. ////////////////////////////////////////////////////////////////
  2. // File - BASIC_IO.C
  3. //
  4. // This is a skeleton driver for a simple ISA card with IO 
  5. // ports access.
  6. // 
  7. ////////////////////////////////////////////////////////////////
  8.  
  9. #include <stdio.h>
  10. #include "../../include/windrvr.h"
  11.  
  12. // put your IO range here
  13. // in this example the range is 0x378-0x37a
  14. enum {MY_IO_BASE = 0x378};
  15. enum {MY_IO_SIZE = 0x3};
  16.  
  17. // global WinDriver handle
  18. HANDLE hWD;
  19. // global card handle
  20. WD_CARD_REGISTER cardReg;
  21.  
  22. BYTE IO_inp(DWORD dwIOAddr)
  23. {
  24.     WD_TRANSFER trns;
  25.     BZERO(trns);
  26.     trns.cmdTrans = RP_BYTE; // R-Read P-Port BYTE
  27.     trns.dwPort = dwIOAddr;
  28.     WD_Transfer( hWD, &trns); // Perform read
  29.     return trns.Data.Byte;
  30. }
  31.  
  32. WORD IO_inpw(DWORD dwIOAddr)
  33. {
  34.     WD_TRANSFER trns;
  35.     BZERO(trns);
  36.     trns.cmdTrans = RP_WORD; // R-Read P-Port WORD
  37.     trns.dwPort = dwIOAddr;
  38.     WD_Transfer( hWD, &trns); // Perform read
  39.     return trns.Data.Word;
  40. }
  41.  
  42. DWORD IO_inpd(DWORD dwIOAddr)
  43. {
  44.     WD_TRANSFER trns;
  45.     BZERO(trns);
  46.     trns.cmdTrans = RP_DWORD; // R-Read P-Port DWORD
  47.     trns.dwPort = dwIOAddr;
  48.     WD_Transfer( hWD, &trns); // Perform read
  49.     return trns.Data.Dword;
  50. }
  51.  
  52. void IO_outp(DWORD dwIOAddr, BYTE bData)
  53. {
  54.     WD_TRANSFER trns;
  55.     BZERO(trns);
  56.     trns.cmdTrans = WP_BYTE; // R-Write P-Port BYTE
  57.     trns.dwPort = dwIOAddr;
  58.     trns.Data.Byte = bData;
  59.     WD_Transfer( hWD, &trns); // Perform write
  60. }
  61.  
  62. void IO_outpw(DWORD dwIOAddr, WORD wData)
  63. {
  64.     WD_TRANSFER trns;
  65.     BZERO(trns);
  66.     trns.cmdTrans = WP_WORD; // R-Write P-Port WORD
  67.     trns.dwPort = dwIOAddr;
  68.     trns.Data.Word = wData;
  69.     WD_Transfer( hWD, &trns); // Perform write
  70. }
  71.  
  72. void IO_outpd(DWORD dwIOAddr, DWORD dwData)
  73. {
  74.     WD_TRANSFER trns;
  75.     BZERO(trns);
  76.     trns.cmdTrans = WP_DWORD; // R-Write P-Port DWORD
  77.     trns.dwPort = dwIOAddr;
  78.     trns.Data.Dword = dwData;
  79.     WD_Transfer( hWD, &trns); // Perform write
  80. }
  81.  
  82.  
  83. BOOL IO_init()
  84. {
  85.     WD_VERSION verBuf;
  86.  
  87.     hWD = INVALID_HANDLE_VALUE;
  88.     hWD = WD_Open();
  89.     if (hWD==INVALID_HANDLE_VALUE)
  90.     {
  91.         printf ("error opening WINDRVR\n");
  92.         return FALSE;
  93.     }
  94.  
  95.     BZERO(verBuf);
  96.     WD_Version (hWD, &verBuf);
  97.     printf (WD_PROD_NAME " version - %s\n", verBuf.cVer);
  98.     if (verBuf.dwVer<WD_VER)
  99.     {
  100.         printf ("error incorrect WINDRVR version. needs ver %d\n",WD_VER);
  101.         WD_Close(hWD);
  102.         return FALSE;
  103.     }
  104.  
  105.     BZERO(cardReg);
  106.     cardReg.Card.dwItems = 1;
  107.     cardReg.Card.Item[0].item = ITEM_IO;
  108.     cardReg.Card.Item[0].fNotSharable = TRUE;
  109.     cardReg.Card.Item[0].I.IO.dwAddr = MY_IO_BASE;
  110.     cardReg.Card.Item[0].I.IO.dwBytes = MY_IO_SIZE;
  111.     cardReg.fCheckLockOnly = FALSE;
  112.     WD_CardRegister (hWD, &cardReg);
  113.     if (cardReg.hCard==0)
  114.     {
  115.         printf ("Failed locking device");
  116.         return FALSE;
  117.     }
  118.  
  119.     return TRUE;
  120. }
  121.  
  122. void IO_end()
  123. {
  124.     WD_CardUnregister(hWD,&cardReg);
  125.     WD_Close(hWD);
  126. }
  127.  
  128. int main(int argc, char *argv[])
  129. {
  130.     if (!IO_init()) return -1;
  131.  
  132.     // Call your device driver routines here 
  133.     
  134.     IO_end();
  135.  
  136.     return 0;
  137. }
  138.  
  139.